package com.mattgmg.miracastwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
import android.util.Log;
import android.view.Display;
import android.widget.RemoteViews;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
public class MiracastWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int length = appWidgetIds.length;
for (int i = 0; i < length; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra(MainActivity.EXTRA_WIDGET_LAUNCH, true);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.miracast_widget);
views.setOnClickPendingIntent(R.id.widget_layout_parent, pendingIntent);
final DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = displayManager.getDisplays();
boolean displaySet = false;
int currentDisplay = -1;
for(int j = 0; j < displays.length; j++){
Display display = displays[j];
if(display.getDisplayId() != Display.DEFAULT_DISPLAY){
views.setTextViewText(R.id.widget_text, display.getName());
views.setTextColor(R.id.widget_text, context.getResources().getColor(android.R.color.holo_blue_bright));
currentDisplay = display.getDisplayId();
displaySet = true;
// Track this
MiracastApplication application
= (MiracastApplication) context.getApplicationContext();
Tracker tracker = application.getDefaultTracker();
sendEventDisplayFound(tracker);
}
}
if(!displaySet){
views.setTextViewText(R.id.widget_text, "Cast Screen");
views.setTextColor(R.id.widget_text, context.getResources().getColor(android.R.color.white));
}
MiracastDisplayListener displayListener = new MiracastDisplayListener(currentDisplay, views, displayManager, appWidgetManager, appWidgetId, context);
displayManager.registerDisplayListener(displayListener, null);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
private void sendEventDisplayFound(Tracker tracker) {
tracker.send(new HitBuilders.EventBuilder()
.setCategory("widget")
.setAction("display_added")
.build());
}
private class MiracastDisplayListener implements DisplayListener {
int mCurrentDisplay = -1;
RemoteViews mViews;
DisplayManager mDisplayManager;
int mAppWidgetId;
AppWidgetManager mAppWidgetManager;
Context mContext;
Tracker mTracker;
public MiracastDisplayListener(int currentDisplay, RemoteViews widgetRemoteViews, DisplayManager displayManager, AppWidgetManager appWidgetManager, int appWidgetId, Context context){
mCurrentDisplay = currentDisplay;
mViews = widgetRemoteViews;
mDisplayManager = displayManager;
mAppWidgetManager = appWidgetManager;
mAppWidgetId = appWidgetId;
mContext = context;
MiracastApplication application
= (MiracastApplication) mContext.getApplicationContext();
mTracker = application.getDefaultTracker();
}
@Override
public void onDisplayRemoved(int displayId) {
if(displayId == mCurrentDisplay){
mCurrentDisplay = -1;
}
mViews.setTextViewText(R.id.widget_text, "Cast Screen");
mViews.setTextColor(R.id.widget_text, mContext.getResources().getColor(android.R.color.white));
// Tell the AppWidgetManager to perform an update on the current app widget
mAppWidgetManager.updateAppWidget(mAppWidgetId, mViews);
}
@Override
public void onDisplayChanged(int displayId) {
}
@Override
public void onDisplayAdded(int displayId) {
mCurrentDisplay = displayId;
Display display = mDisplayManager.getDisplay(displayId);
mViews.setTextViewText(R.id.widget_text, display.getName());
mViews.setTextColor(R.id.widget_text, mContext.getResources().getColor(android.R.color.holo_blue_bright));
sendEventDisplayFound(mTracker);
// Tell the AppWidgetManager to perform an update on the current app widget
mAppWidgetManager.updateAppWidget(mAppWidgetId, mViews);
}
}
}